<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 1.js作用域:就是代码名字(变量)在某个范围内起作用和效果,目的是为了提高程序的可靠性
        //          更重要的是减少命名冲突
        // 2.js作用域(es6)之前:全局作用域,局部作用域,现阶段我们js没有块级作用域
        // 我们js 是在es6 的时候新增的块级作用域
        // 块级作用域 {} if {} for {}
        // 3. 全局作用域:整个script 标签,或者是一个单独的js文件
        var num = 10
        // 4.局部作用域:在函数内部就是局部作用域,这个代码的名字只在函数内部起效果起作用
        function fun() {
            // 局部作用域
            var num = 20
            console.log(num);//20
        }
        fun()
        console.log(num);//10
        var num = 30
        console.log(num); //30

        // 变量的作用域:根据作用域的不同分为 全局变量  和  局部变量
        // 1. 全局变量 在全局作用域下的变量,在全局下都可以使用
        // 注意:函数内部没有声明直接赋值的变量也是全局变量
        var num1 = 10
        console.log(num1); // 10
        function fun1() {
            console.log(num1); //10
        }
        fun1()
        // 2.局部变量 在局部作用域下的变量, 后者在函数内部的变量就是 局部变量
        // 注意:函数的形参也可以看做是局部变量
        function fun2() {
            var num3 = 20 //num3就是局部变量 只能在函数内部使用
            num4 = 40
        }
        fun2()
        // console.log(num3); //error:Uncaught ReferenceError: num3 is not defined
        console.log(num4); //40,函数内未声明直接赋值,这个为全局变量

        // 3.从执行效率来看全局变量和局部变量
        // (1)全局变量只有在浏览器关闭的时候才会销毁,比较占内存
        // (2)局部变量 当我们程序执行完毕就会销毁, 比较节约内存资源
    </script>
</head>
<body>
    
</body>
</html>